package com.ziDingYiValidator;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

import static java.lang.annotation.ElementType.*;

/**
 * @interface表示定义一个注解类，使用时就是：@CheckCase
 * @Target表示目标：就是@CheckCase(自定义的注解)可以放到哪些位置上
 * @Target里面有好多属性：
 *     1、METHOD：表示用于描述一个方法，可以放到get、set、controller、server、dao...中定义的方法上
 *     2、FIELD：表示标注在类属性上
 *     3、ANNOTATION_TYPE：表示注解的类
 *     4、CONSTRUCTOR：表示用于描述构造器
 *     5、PARAMETER：表示用来描述参数
 *@Retention：表示@CheckCase这个注解在什么时候通过反射被读取，一般都是RUNTIME
 *     1、RUNTIME：在运行期间
 *     2、SOURCE：在源文件中有效
 *     3、CLASS：在class文件中有效
 * @Constraint：指明用哪个类去完成@CheckCase注解要实现的功能
 *    validatedBy：指定自定义的类
 * @Documented：表示必填项，在使用@CheckCase注解的时候
 */
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = TelValidator.class)
@Documented
public @interface CheckTel {

    /**
     * message：表示这个属性的默认提示消息
     *groups：这个约束条件属于哪个校验组，如果不指定可以设置为空
     *
     */
    String message() default "{车牌号码必须大写}";

    Class<?>[] groups() default { };

    Class<? extends Payload>[] payload() default { };

}
